package fabricas;

import excessoes.FabricaDAOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/**
 *
 * @author Marcelo Neto
 */
public class PropertiesFabrica 
{
    private static Properties config;
    private static File FILE = new File("sispac.properties");

    public PropertiesFabrica() throws FabricaDAOException
    {
        try
        {
            // Cria o arquivo de propriedades
            config =  new Properties();
            //String path = System.getProperty("user.dir");
            
            // Seta as definições do NUP
            config.setProperty("SEQUENCIALNUP", "1");
            config.setProperty("SIGLANUP", "ACONT");
            config.setProperty("ANONUP", "2013");

            // Seta as definições do servidor smtp
            //config.setProperty("EMAIL", null);
            config.setProperty("NOMEREMETENTE", "");
            config.setProperty("REMETENTE", "");
            config.setProperty("USUARIOEMAIL", "");
            config.setProperty("SENHAEMAIL", "");
            config.setProperty("PORTA", "");
            config.setProperty("SERVIDORSMTP", "");
            config.setProperty("SSL", "true");
            config.setProperty("TLS", "true");

            // Seta as definições do termo
            config.setProperty("TERMO", "");

            // Seta as definições do aviso
            config.setProperty("AVISOS", "");
            
            // Seta as definições da OM e das SEÇÕES
            config.setProperty("NOMEOM", "");
            config.setProperty("NOMEOMSIGLA", "");
            config.setProperty("ENDERECOOM", "");
            config.setProperty("NOMESECAOTI", "");
            config.setProperty("TELEFONESECAOTI", "");
            config.setProperty("NOMESECAOSTS", "");
            config.setProperty("ENDERECOSTS", "");
            config.setProperty("TELEFONESECAOSTS", "");
            
            salvaProperties(config);
            loadProperties(config); // Carrega propriedades
        }
        catch (Exception ex) {
            throw new FabricaDAOException("Não foi possível criar o arquivo de propriedades!\nContacte o administrador do sistema.\n" + ex.toString());
        }
    }
    
    // Salva propriedades pelo desktop
    public static void salvaProperties(Properties propriedades) throws FabricaDAOException
    {
        try
        {
            FileOutputStream output = new FileOutputStream(FILE);
            propriedades.store(output, "Configuração");
        }
        catch (IOException e) {
            throw new FabricaDAOException("Não foi possível gravar no arquivo de propriedades!\nContacte o administrador do sistema.\n" + e.getMessage());
        }
    }
    
    // Carregar propriedade pelo desktop
    public static void loadProperties(Properties propriedades) throws FabricaDAOException
    {
        try
        {
            FileInputStream input = new FileInputStream(FILE);
            propriedades.load(input);
        }
        catch (IOException e) {
            throw new FabricaDAOException("Não foi possível carregar as variáveis do arquivo de propriedades!\nContacte o administrador do sistema.\n" + e.getMessage());
        }
    }
    
    // Lê arquivo pelo desktop
    public static Properties leProperties() throws FabricaDAOException
    {
        Properties propriedades = new Properties();
        FileInputStream fis;
        try
        {
            fis = new FileInputStream(FILE);
            propriedades.load(fis);
            fis.close();
            verificaObjeto(propriedades);
            return propriedades;
        }
        catch (IOException ex) {
            throw new FabricaDAOException("Não foi possível ler o arquivo de propriedades!\nContacte o administrador do sistema.\n" + ex.getCause());
        }
    }
    
    // Lê arquivo pela web
    public static Properties lePropertiesJsf(String caminho) throws FabricaDAOException
    {
        Properties propriedades = new Properties();
        File file = new File(caminho);
        FileInputStream fis;
        try
        {
            fis = new FileInputStream(file);
            propriedades.load(fis);
            fis.close();
            verificaObjeto(propriedades);
            return propriedades;
        }
        catch (IOException ex) {
            throw new FabricaDAOException("Não foi possível ler o arquivo de propriedades pela jsf!\nContacte o administrador do sistema.\n" + ex.getMessage());
        }
    }
    
    // Salva propriedades pelo jsf
    public static void salvaPropertiesJsf(Properties propriedades, String caminho) throws FabricaDAOException
    {
        File file = new File(caminho);
        try
        {
            FileOutputStream output = new FileOutputStream(file);
            propriedades.store(output, "Configuração");
        }
        catch (IOException e) {
            throw new FabricaDAOException("Não foi possível gravar no arquivo de propriedades pelo jsf!\nContacte o administrador do sistema.\n" + e.getMessage());
        }
    }

    public static void verificaObjeto(Properties propriedades) throws FabricaDAOException
    {
        try 
        {
            Object sequencialnup = propriedades.getProperty("SEQUENCIALNUP");
            if (sequencialnup == null) {
                throw new FabricaDAOException("A variável SEQUENCIALNUP não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object siglanup = propriedades.getProperty("SIGLANUP");
            if (siglanup == null) {
                throw new FabricaDAOException("A variável SIGLANUP não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object anonup = propriedades.getProperty("ANONUP");
            if (anonup == null) {
                throw new FabricaDAOException("A variável ANONUP não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object nomeremetente = propriedades.getProperty("NOMEREMETENTE");
            if (nomeremetente == null) {
                throw new FabricaDAOException("A variável NOMEREMETENTE não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object remetente = propriedades.getProperty("REMETENTE");
            if (remetente == null) {
                throw new FabricaDAOException("A variável REMETENTE não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object usuarioemail = propriedades.getProperty("USUARIOEMAIL");
            if (usuarioemail == null) {
                throw new FabricaDAOException("A variável USUARIOEMAIL não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object senhaemail = propriedades.getProperty("SENHAEMAIL");
            if (senhaemail == null) {
                throw new FabricaDAOException("A variável SENHAEMAIL não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object porta = propriedades.getProperty("PORTA");
            if (porta == null) {
                throw new FabricaDAOException("A variável PORTA não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object servidorsmtp = propriedades.getProperty("SERVIDORSMTP");
            if (servidorsmtp == null) {
                throw new FabricaDAOException("A variável SERVIDORSMTP não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object ssl = propriedades.getProperty("SSL");
            if (ssl == null) {
            throw new FabricaDAOException("A variável SSL não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        
            Object tls = propriedades.getProperty("TLS");
            if (tls == null) {
                throw new FabricaDAOException("A variável TLS não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object termo = propriedades.getProperty("TERMO");
            if (termo == null) {
                throw new FabricaDAOException("A variável TERMO não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            Object avisos = propriedades.getProperty("AVISOS");
            if (avisos == null) {
                throw new FabricaDAOException("A variável AVISOS não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object nomeom = propriedades.getProperty("NOMEOM");
            if (nomeom == null) {
                throw new FabricaDAOException("A variável NOMEOM não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object nomeomsigla = propriedades.getProperty("NOMEOMSIGLA");
            if (nomeomsigla == null) {
                throw new FabricaDAOException("A variável NOMEOMSIGLA não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object enderecoom = propriedades.getProperty("ENDERECOOM");
            if (enderecoom == null) {
                throw new FabricaDAOException("A variável ENDERECOOM não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object nomesecaoti = propriedades.getProperty("NOMESECAOTI");
            if (nomesecaoti == null) {
                throw new FabricaDAOException("A variável NOMESECAOTI não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object telti = propriedades.getProperty("TELEFONESECAOTI");
            if (telti == null) {
                throw new FabricaDAOException("A variável TELEFONESECAOTI não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object nomesecaosts = propriedades.getProperty("NOMESECAOSTS");
            if (nomesecaosts == null) {
                throw new FabricaDAOException("A variável NOMESECAOSTS não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object enderecosts = propriedades.getProperty("ENDERECOSTS");
            if (enderecosts == null) {
                throw new FabricaDAOException("A variável ENDERECOSTS não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
            
            Object telsts = propriedades.getProperty("TELEFONESECAOSTS");
            if (telsts == null) {
                throw new FabricaDAOException("A variável TELEFONESECAOSTS não foi encontrada no ARQUIVO de propriedades!\nContacte o administrador do sistema.");
            }
        }
        catch (Exception e) {
            System.exit(0);
        }
    }
}